package com.sugon.dao;

import com.sugon.entity.SysUserEntity;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 系统用户
 *
 * @author lipengjun
 * @date 2017年11月18日 下午13:13:23
 */
public interface SysUserDao extends BaseDao<SysUserEntity> {

    /**
     * 查询车间领导列表
     * 领导指的是 具有审批权限的，比如：车间设备技术室主管 制造处设备技术室主管 制造处技术质量室主任-工装 车间技术质量室主任-模具
     * @param workshopId 车间ID
     * @return
     */
    List<SysUserEntity> queryWorkshopLeader(@Param("workshopId") String workshopId);

    /**
     * 根据车间和角色，找到匹配用户列表
     *
     * @param workshopId 车间ID
     * @param roleId     角色ID
     * @return
     */
    List<SysUserEntity> queryByWorkshopAndRole(@Param("workshopId") String workshopId, @Param("roleId") String roleId);

    /**
     * 查询用户的所有权限
     *
     * @param userId 用户ID
     */
    List<String> queryAllPerms(String userId);

    /**
     * 查询用户的所有菜单ID
     */
    List<String> queryAllMenuId(String userId);

    /**
     * 根据用户名，查询系统用户
     */
    SysUserEntity queryByUserName(String username);

    /**
     * 修改密码
     */
    int updatePassword(Map<String, Object> map);

    /**
     * 更新用户的 clientId
     *
     * @param userId   用户ID
     * @param clientId 客户端ID
     * @return
     */
    int updateClientId(@Param("userId") String userId, @Param("clientId") String clientId);

    /**
     * 更新用户的 unionId
     *
     * @param userId   用户ID
     * @param unionId 客户端ID
     * @return
     */
    int updateUnionId(@Param("userId") String userId, @Param("unionId") String unionId);

    /**
     * 获取pe人员
     */
    SysUserEntity getPE();

    /**
     * treeDeptByParent
     *
     * @param map
     * @return
     */
    List<SysUserEntity> treeDeptByParent(Map<String, Object> map);

    /**
     * 获取模具维修人员
     *
     * @param map
     * @return
     */
    List loadFixer(Map<String, Object> map);

    /**
     * 查询指定角色用户列表
     *
     * @param roleCode 角色编码
     * @return
     */
    List<SysUserEntity> queryAllRoleUser(@Param("roleCode") String roleCode);

    /**
     * 查询用户信息
     * @param userNameList 用户名列表，多个用户名之间用逗号分割
     * @return
     */
    @Select("SELECT * FROM sys_user WHERE instr(#{userNameList},user_name) > 0")
    List<SysUserEntity> queryUser(@Param("userNameList") String userNameList);

}
